Graphics (or graphical) processing units (GPUs) have evolved from fixed-function pipelines used primarily for graphics acceleration to programmable parallel processing units that are suitable for general purpose computations. Improved GPU performance has made GPUs increasingly popular for general purpose computations on GPUs (referred to as “GPGPU”). GPGPU generally uses a GPU to perform computations in applications traditionally handled by a central processing unit (CPU). GPGPU is made possible by the addition of programmable stages and higher precision arithmetic to computational pipelines, allowing developers to use streaming programming languages on non-graphics data. Graphics processors include discrete GPUs (e.g., separate devices primarily dedicated to the processing of graphics), integrated GPUs (e.g., integrated into another device such as a north bridge), CPUs capable of processing graphics, accelerated or fused processing units (e.g., a GPU integrated into another processor such as a CPU), digital signal processors (DSPs), application processors, and the like.
Several GPU programming languages target GPGPU, such as OpenCL™ (from the Khronos Group), DirectCompute™ (from Microsoft Corporation), CUDA™ (from NVIDIA Corporation). These programming languages are typically based on the C programming language. These streaming programming languages describe computational kernels and data buffers but do not describe higher level constructs that result from their composition.